package org.test.analysis;

import org.junit.Test;


/**
 * 汉诺塔
 * 时间复杂度是以2为底的指数增加
 * @author game
 *
 */
public class Hannoi {

	/**
	 * 把n个塔在a,b,c中移动,
	 * 
	 * @param n
	 *            个数
	 * @param a
	 *            起始
	 * @param b
	 *            中间过度
	 * @param c
	 *            终点
	 */
	public void movehannoi(int n, char a, char b, char c) {

		if(n==0){ //n为1了,不用移了
			return;
		}
		movehannoi(n - 1, a, c, b);// 把n-1个从a-b.
		moveone(a, c);// 把最下面的从a到c
		movehannoi(n - 1, b, a, c);

	}

	/**
	 * 从a到b,移动一个盘
	 * 
	 * @param a
	 * @param b
	 */
	public void moveone(char a, char b) {
		System.out.println(a + "->" + b);
	}

	@Test
	public void testmovehannoi() {
		int n = 3;
		char a = 'a';
		char b = 'b';
		char c = 'c';
		movehannoi(n, a, b, c);
	}
}
